package ut;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
import java.io.File;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContext;
public class ContextListener extends TimerTask implements ServletContextListener{
	private Timer timer = new Timer();
    public void contextInitialized(ServletContextEvent e){
		ServletContext context = e.getServletContext();
		// 找到網站重要的路徑並儲存
		// 以下程式確保在不同環境下的路徑一致性 ( 確保結尾都有加上 File Separator )
		String separatorCharacter = File.separator;
		if(context.getRealPath("/").endsWith(File.separator)){
			separatorCharacter = "";
		}
		System.setProperty("ut.root", context.getRealPath("/") + separatorCharacter);
		System.setProperty("ut.resource", context.getRealPath("/") + separatorCharacter + "WEB-INF" + File.separator + "resource" + File.separator);
		// 從初始參數中取得 Paypal 的重要設定並儲存
		System.setProperty("paypal.endpoint", context.getInitParameter("PAYPAL_ENDPOINT"));
		System.setProperty("paypal.auth", context.getInitParameter("PAYPAL_AUTH"));

		// 設定每日更新程式排程 ( 台北時間每日 00:00:00 更新 )
		GregorianCalendar updateTime = new GregorianCalendar(java.util.TimeZone.getTimeZone("GMT+08:00"));
		updateTime.add(Calendar.DAY_OF_MONTH, 1);
		updateTime.set(Calendar.HOUR_OF_DAY, 0);
		updateTime.set(Calendar.MINUTE, 5);
		updateTime.set(Calendar.SECOND, 0);
		timer.scheduleAtFixedRate(this, updateTime.getTime(), 24 * 60 * 60 * 1000 /* 24小時 */);
	}
	public void contextDestroyed(ServletContextEvent e){
		// 終止每日更新程式排程
		timer.cancel();
	}
	// 每日更新程式
	public void run(){
		ut.data.Database.executeDailyUpdate();
	}
}